//#include "MeshFile.hpp"
//#include <fstream>
//#include "MeshView.hpp"
//#include <iostream>
//#include <boost/archive/text_iarchive.hpp>
//#include <boost/archive/text_oarchive.hpp>
//
//#include "boost/serialization/serialization.hpp"
//#include "boost/serialization/vector.hpp"
//#include "boost/serialization/list.hpp"
//#include "boost/serialization/map.hpp"
//
//using namespace std;
//
//
//namespace
//{
//   //template <typename IO, typename T, int SIZE>
//   //void Transfer(IO& io, boost::array<T, SIZE>& aVal)
//   //{
//   //   for (size_t i = 0; i < aVal.size(); ++i)
//   //   {
//   //      Transfer(aVal[i]);
//   //   }
//   //}
//   //template <typename IO>
//   //void Transfer(IO& io, Face& aFace)
//   //{
//   //   Transfer(io, aFace.vertex);
//   //   Transfer(io, aFace.materials);
//   //}
//   //template <typename IO>
//   //void Transfer(IO& io, Polyhedron& aPoly)
//   //{
//   //   Transfer(io, aPoly.arity);
//   //   Transfer(io, aPoly.vertex);
//   //   Transfer(io, aPoly.material);
//   //}
//   //
//   //template <typename IO>
//   //void TransferOptions(IO& aIo, MeshViewConfig& aConfig)
//   //{
//   //   Transfer(aIo, aConfig.mFaceAlpha);
//   //   Transfer(aIo, aConfig.mFlipMaterials);
//   //   Transfer(aIo, aConfig.mOutlineFaces);
//   //   Transfer(aIo, aConfig.mOutlinePolys);
//   //   Transfer(aIo, aConfig.mPolyAlpha);
//   //   Transfer(aIo, aConfig.mPolyScale);
//   //   Transfer(aIo, aConfig.mShowCreaseEdges);
//   //   Transfer(aIo, aConfig.mShowCreaseVerts);
//   //   Transfer(aIo, aConfig.mShowFaces);
//   //   Transfer(aIo, aConfig.mShowPolys);
//   //   Transfer(aIo, aConfig.mShowVerts);
//   //   Transfer(aIo, aConfig.mShowWireframe);
//   //   Transfer(aIo, aConfig.mHiddenRegions);
//   //}
//
//   //template <typename IO>
//   //void Transfer(IO& io, MeshView& aMesh)
//   //{
//   //   MeshViewConfig cfg = aMesh.GetConfig();
//   //   TransferOptions(io, cfg);
//   //   aMesh.SetConfig(cfg, false);
//   //   bool hasSubMesh = aMesh.GetSubdivisionMesh() != 0;
//   //   Transfer(io, hasSubMesh);
//   //   if (hasSubMesh)
//   //   {
//   //      MeshViewConfig cfg2 = aMesh.GetSubdivisionMesh()->GetConfig();
//   //      TransferOptions(io, cfg2);
//   //      aMesh.GetSubdivisionMesh()->SetConfig(cfg2, false);
//   //   }
//   //   Transfer(io, *aMesh.mMesh.verts);
//   //   Transfer(io, *aMesh.mMesh.crease_faces);
//   //   Transfer(io, *aMesh.mMesh.crease_edges);
//   //   Transfer(io, *aMesh.mMesh.polys);   
//   //}
//
//}
//
//
//
//void MeshFile::Write(const std::string& aFileName,
//                     const MeshView&    aMesh)
//{
//   ofstream io(aFileName.c_str());
//   boost::archive::text_oarchive ar(io);
//   ar & (MeshView&)aMesh;
//}
//
//void MeshFile::Read(const std::string& aFileName,
//                    MeshView&          aMesh)
//{
//   ifstream io(aFileName.c_str(), ios::binary);
//   boost::archive::text_iarchive ar(io);
//   ar & aMesh;
//}
